變數利用 tf.Variable 類來創建,它表示張量,執行運算可以改變值,或使用特定運算可以讀取和改值。
1.創建變數,並提供初始值:
initial_value = tf.constant([[2.0, 4.0], [3.0, 5.0]])
first_variable = tf.Variable(initial_value)
在前幾天的文章中,有介紹到張量的定義方式和操作,而變數和它的操作方式十分相似,它們都是 tf.Tensor 支持的一種數據結構。所以要將上述創建好的變數資料印出來,操作如下:
print("Shape: ", first_variable.shape)
print("DType: ", first_variable.dtype)
print("Value: ", first_variable.numpy()
會輸出:
Shape: (2, 2)
DType: <dtype: 'float32'>
Value: [[2. 4.]
[3. 5.]]
2.更新變數,assign 是 tf.Variable 類的一個方法,會將新的值分配給變數。這個方法目的在於更新變數的值,不會創建新的張量,而是重用現有張量的內存。
x = tf.Variable([2.0, 3.0])
x.assign([1.0, 2.0])
try:
x.assign([1.0, 2.0])
except Exception as e:
print(f"{type(e).__name__}: {e}")
print(x.numpy())
會得到[1. 2.]。
3.放置變數,為了提高性能,TensorFlow 會嘗試將張量和變數放置在與其 dtype 兼容的最快設備上。如果有 GPU,那大部分的變數都會放置在 GPU 上。
with tf.device('CPU:0'):
a = tf.Variable([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)
print(c)
可以叫出:
tf.Tensor(
[[22. 28.]
[49. 64.]], shape=(2, 2), dtype=float32)
matmul 用於矩陣乘法的函數,它可以用於進行二維張量(矩陣)的乘法,也支持高維張量的乘法運算。